new Vue({
    el: '#app',
    mixins: [Save],//组件配置文件，路径/utils/components.js
    data() {
        return {
            dataForm: {
                Receipt_Date: '', // 出库日期
                Receipt_Type: '', // 出库类型：0：大宗商品   1：零售商品
                Store_SerialNumber: '', // 仓库编号
                Enterprise_Info_SerialNumber: '', // 企业信息序列号
            },
            childDataForm: [{}], // 子表 sales_receipt_detail
            storeList: [], // 仓库列表，用于下拉选择
            enterpriseList: [], // 企业列表，用于下拉选择
        }
    },
    mounted() {
        /**
         * 组件配置文件中自动执行方法
         * 1.this.init(); //初始化文件
         * 2.this.getData(); //仅修改时执行，根据BOM配置属性查询
         */
        this.getStoreList();
        this.getEnterpriseList();
    },
    // 在数据加载完成后执行（修改模式下）
    documentLoadFinished() {
        // 如果是添加模式，生成流水号
        if (this.action === 'Add') {
            this.generateSerialNumber();
        }
    },
    methods: {
        // 获取仓库列表
        getStoreList() {
            generalApi.generalQueryByTableName({
                Data: 'business_store_info',
                Condition: `Row_Status='0'`
            }).then(data => {
                this.storeList = data || [];
            }).catch(xhr => {
                this.$message.error("获取仓库列表失败，请联系开发者!")
            })
        },
        // 获取企业列表（从enterprise_info表查询）
        getEnterpriseList() {
            generalApi.generalQueryByTableName({
                Data: 'enterprise_info',
                Condition: `Row_Status='0'`
            }).then(data => {
                if (data && Array.isArray(data) && data.length > 0) {
                    this.enterpriseList = data.map(item => ({
                        Enterprise_Info_SerialNumber: item.Enterprise_Info_SerialNumber,
                        Enterprise_Name: item.Enterprise_Name
                    }));
                } else {
                    this.enterpriseList = [];
                }
            }).catch(xhr => {
                this.$message.error("获取企业列表失败，请联系开发者!")
            })
        },
        // 生成流水号（Sales_Receipt_SerialNumber）
        generateSerialNumber() {
            const timestamp = Date.now();
            const random = Math.floor(Math.random() * 1000).toString().padStart(3, '0');
            this.dataForm.Sales_Receipt_SerialNumber = `SR${timestamp}${random}`;
        },
        // 重写提交方法，在提交前设置必要的字段
        async handleSubmit() {
            // 设置操作时间和操作者
            const now = new Date();
            this.dataForm.Operation_Datetime = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}`;
            this.dataForm.Operation_ID = getCookie('user') || '';
            
            // 如果没有生成流水号，则生成一个
            if (!this.dataForm.Sales_Receipt_SerialNumber) {
                this.generateSerialNumber();
            }
            
            // 处理子表数据，确保每个子表项都有必要的字段
            const validChildData = this.childDataForm.filter(item => !item.Row_Status || item.Row_Status != '1');
            
            // 验证是否有子表数据
            if (validChildData.length === 0) {
                this.$message.warning('请至少添加一条出库明细信息！');
                return;
            }
            
            validChildData.forEach((item, index) => {
                // 生成子表流水号（如果还没有）
                if (!item.Sales_Receipt_Detail_SerialNumber) {
                    const timestamp = Date.now();
                    const random = Math.floor(Math.random() * 1000).toString().padStart(3, '0');
                    item.Sales_Receipt_Detail_SerialNumber = `SRD${timestamp}${random}${index}`;
                }
                // 设置主表流水号关联
                if (this.action === 'Add') {
                    item.Sales_Receipt_SerialNumber = this.dataForm.Sales_Receipt_SerialNumber;
                } else if (this.action === 'Modify') {
                    item.Sales_Receipt_SerialNumber = this.dataForm.Sales_Receipt_SerialNumber || this.nodeKey;
                }
                // 设置订单类型（如果为空，则使用主表的出库类型）
                if (!item.Order_Type && this.dataForm.Receipt_Type) {
                    item.Order_Type = this.dataForm.Receipt_Type;
                }
                // 设置操作时间和操作者
                item.Operation_Datetime = this.dataForm.Operation_Datetime;
                item.Operation_ID = this.dataForm.Operation_ID;
                // 设置行状态
                if (!item.Row_Status) {
                    item.Row_Status = '0';
                }
            });
            
            // 调用父类的提交方法
            const allValid = await this.validateAllForms();
            if (allValid) {
                this.loading = true;
                try {
                    const lJSONObject_DataSet = this.generateStructure();
                    const res = await generalApi.generalSaveByRequestBody({
                        Data: lJSONObject_DataSet
                    })
                    if (res.Status == "success") {
                        this.$message.success("提交成功");
                        window.location.href = './index.html';
                    } else {
                        this.$message.error("提交失败，请重试！");
                    }
                    this.loading = false;
                } catch (error) {
                    console.error(error);
                    this.$message.error("系统错误，请联系开发者!")
                    this.loading = false;
                }
            } else {
                this.$message({
                    message: '存在未填写的必填项！',
                    type: 'warning'
                });
            }
        }
    }
})
